package begin

import (
	"flag"
	"fmt"
	"gitee.com/jade-virtual/kunlun/component/config"
	"gitee.com/jade-virtual/kunlun/pkg/task"
	"github.com/robfig/cron"
	"github.com/spf13/viper"
)

type Kunlun struct {
	cron     *cron.Cron
	webFrame WebFrame
	addr     string
	initial  bool
}

var SelfApp *Kunlun

// Init 初始化
func Init(webFrame WebFrame) {
	SelfApp = &Kunlun{cron: cron.New(), webFrame: webFrame, initial: false}
	// 获取启动端口和配置文件路径
	var addr, cfg string
	flag.StringVar(&addr, "addr", ":8080", "server listen and serve address, like 127.0.0.1:8888 or :8080")
	flag.StringVar(&cfg, "config", "config/api.yaml", "the config file path")
	flag.Parse()
	SelfApp.addr = addr
	// 读取配置文件
	if err := config.ReadYamlConfigs(cfg); err != nil {
		panic(fmt.Errorf("ReadYamlConfigs Fail: %s \n", err))
	}
	// 启动定时器
	SelfApp.StartCron()
	// WEB框架初始化
	if err := webFrame.Init(); err != nil {
		panic(fmt.Errorf("webFrame.Init Fail: %s \n", err))
	}
	SelfApp.initial = true
}

func Start() {
	if err := SelfApp.webFrame.Start(); err != nil {
		panic(fmt.Errorf("webFrame.start Fail: %s \n", err))
	}
}

// Check 检查是否初始化
func Check() bool {
	return SelfApp.initial
}

func (k *Kunlun) StartCron() {
	// 秒 分 小时 日期 月份 星期 年
	_ = k.cron.AddFunc("0/10 * * * * ?", func() {
		go task.CheckLicence()
	})
	k.cron.Start()
}

func (k *Kunlun) IsDev() bool {
	return viper.GetString("env") == "dev"
}

func (k *Kunlun) Addr() string {
	return k.addr
}
